package ecole.utilisateur;

/**
 * Classe mere de la classe Etudinat et Professeur
 * 
 * @author Salah Bennour
 */
public class Personne implements java.io.Serializable{

	private static final long serialVersionUID = 2L;
	
	protected String nom, prenom, identifiant, adresseMail, nomFormation;
	protected char sexe;	

	// ***************CONSTRUCTEURS*************************
	
	public Personne(){
	    this.nom="";
	    this.prenom="";
	    this.identifiant="";
	    this.adresseMail="";
	    this.nomFormation="";
	    attribuerSexe('M');
	}
	
	public Personne(String nom, String prenom, char sexe, boolean estProf){
		nom = nom.toLowerCase(); //Mise en majuscule
		this.nom = (nom.substring(0,1)).toUpperCase() +"" + nom.substring(1); //mise en minuscule du mot sauf initiale
		prenom = prenom.toLowerCase(); 
		this.prenom = (prenom.substring(0,1)).toUpperCase()+""+prenom.substring(1);
		// Verifie que la methode attribuer sexe renvoie true
		if(!attribuerSexe(sexe)){
			System.out.println("Veuillez saisir M ou F s'il vous plait.");
		}	
		this.identifiant = identifiant(estProf);
		this.adresseMail = identifiant + "@polytech.unice.fr";
	}
	// *************** METHODES *************************

	/**
	 * Methode permettant d'attribuer un identifiant a un professeur ou un etudiant. Ainsi qu'une adresse mail.
	 * @param estProf est un boolean qui permet de savoir si la personne est un professeur ou non.
	 * @return String : retourne l'identifiant de la personne(etudiant ou professeur).
	 */
	private String identifiant(boolean estProf) {
		identifiant = ((getNom()).substring(0, 1)).toUpperCase() + ""
				+ ((getPrenom()).substring(0, 1)).toUpperCase() + ((estProf) ? "p" : "e");
		String s = ""+((estProf) ? Professeur.nbId : Etudiant.nbId );
		String nbZero = "";
		switch (s.length()) {
		case 1:
			nbZero = "00000";
			break;
		case 2:
			nbZero = "0000";
			break;
		case 3:
			nbZero = "000";
			break;
		case 4:
			nbZero = "00";
			break;
		case 5:
			nbZero = "0";
			break;
		} 
		if( estProf)
		{
			s += Professeur.nbId;
			identifiant = identifiant + "" + nbZero + "" + Professeur.nbId;
			Professeur.nbId++;
			
		}
		else
		{
			s+= Etudiant.nbId;
			identifiant = identifiant + "" + nbZero + "" + Etudiant.nbId;
			Etudiant.nbId++;
			
		}
		return identifiant;
	}

	/**
	 * Methode permettant d'attribuer un sexe.
	 * @param sexe est un charactere de type 'M'('m') ou 'F'('f'). M signifie masculin et F pour Feminin.
	 * @return retourne true si le charactere est un 'm' ou un 'f'. Sinon false.
	 */
	public boolean attribuerSexe(char sexe){
		sexe = Character.toUpperCase(sexe);
		if( sexe == 'M' || sexe == 'F'){
			this.sexe = sexe;
			return true;
		}
		return false;
	}

	// *************** GETTER *************************

	/**
	 * Methode permettant de retourner le nom d'une personne.
	 * @return retourne le nom d'une personne.
	 */
	public String getNom(){
		return nom;
	}

	/**
	 * Methode permettant de retourner le prenom d'une personne.
	 * @return retourne le prenom d'une personne.
	 */
	public String getPrenom(){
		return prenom;
	}

	/**
	 * Methode permettant de retourner le sexe d'une personne.
	 * @return retourne 'M' pour un homme et 'F' pour une femme.
	 */
	public char getSexe(){
		return sexe;
	}


	// *************** SETTER *************************
	/**
	 * Methode permettant de modifier le nom d'une personne.
	 * @param nom est le nouveau nom d'une personne.
	 */
	public void setNom(String nom){
		this.nom = nom;
	}

	/**
	 * Methode permettant de modifier le prenom d'une personne.
	 * @param prenom est le nouveau prenom d'une personne.
	 */
	public void setPrenom(String prenom){
		this.prenom = prenom;
	}

	/**
	 * Methode permettant de modifier le "sexe" d'une personne.
	 * @param sexe est un charactere 'M' pour Masculin et 'F' pour Feminin.
	 */
	public void setSexe(char sexe){
		sexe = Character.toUpperCase(sexe);
		if( sexe == 'M' || sexe =='F') this.sexe = sexe;
		else System.err.println("Veuillez saisir M pour Homme et f pour Femme");
	}


	// ***************TO STRING*************************

	public String toString(){
		return "PERSONNE  \n \t Nom :" +getNom()+ 
		"\n \t Prenom :" +getPrenom()+ 
		"\n \t Sexe :" +getSexe(); 
	}
}
